從迭代到遞歸:思維的重構
遞歸(Recursion)是一種從本質上改變問題解決視角的方法論。在處理列表求和等問題時,迭代法(程式碼清單 4-2)依賴於顯式的累加器 theSum 以及迴圈狀態控制;而遞歸法則依賴於深刻的數學定義:
$$listsum(numList) = first(numList) + listsum(rest(numList))$$
遞歸不僅僅是函數呼叫自身,它會將複雜問題分解為與其結構相同但規模更小的子問題,其核心在於識別大問題與子問題之間的自相似性。遞歸執行包含兩個對稱階段:
- 「遞去」階段:不斷將列表切片並壓入呼叫堆疊,直到觸及可解決的基準情況(Base Case)。
- 「歸來」階段:從最簡單的狀態開始,逐層向上返回並合併結果。
核心直覺
迭代思維是「拿一個桶,把數字一個個丟進去加起來」;遞歸思維則是「如果你能告訴我剩下那些數的總和是多少,我只要加上第一個數就行了」。